今天,剛好接到同學的訊息問我有關Java的遞迴式運算,也就是這篇文章的主題「N階乘法」,那時候看了一下Java的程式碼並稍微讓運作平台進行運作,輸出結果沒有問題,就先來看看程式碼:不得不說,這不是Python我知道
public class Nsteptimes {
public Nsteptimes() {//建立空白方法助於接下來的物件呼叫
}
public int Factorial(int n) {
if(n==0) {
return 1;
}else {
return n*Factorial(n-1);
//比較有經驗的人應該就會發現這裡有遞迴架構
}
}
public static void main(String args[]) {
Nsteptimes nst = new Nsteptimes();
System.out.print(nst.Factorial(5));
}
}
//輸出結果為120,數據正確
那就來簡單解釋一下遞迴的架構吧:
藉由上方的程式碼會先經過if/else的判斷,進到下方else的輸出,會導出Factorial(5) = 5 * Factorial(4)
,之後又會因為 Factorial(4)未定義的關係,又進一步判斷並轉換為5 * Factorial(4) = 5 * (4 * Factorial(3))
,之後不斷的判斷到Factorial(0)才有定義為1,而不停堆疊的乘法計算便可以開始進行,此刻的程式碼就是:Factorial(5) = 5*(4*(3*(2*(1*(1))))) = 120
好啦,前面的鋪陳/解釋也差不多了,那就進到Python的程式碼吧:
def NstepMode(read_in):
if type(read_in) is not int:
print("格式錯誤,請重新執行程式!")
if read_in < 0:
print("N階乘最小值為 0! = 1,小於0之階乘不存在")
elif read_in == 0:
return 1
else:
return read_in * NstepMode(read_in-1)
print(NstepMode(5))
"""輸出結果為120,輸出正確"""